package com.warm.spring.aop;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclareParents;

/**
 * @Description TODO
 * @Author iyb-liangchuang
 * @Date 2021/5/13 16:57
 */
@Aspect
public class EnhanceAspect {

    /**
     * 当 Spring 发现一个 bean 使用 @Aspect 注解时, Spring 会创建一个代理, 然后委托给被代理的 bean 或被引入的实现
     * AOP 通过注解引入新功能: 通过切面为 bean 添加新方法
     */

    /**
     * @DeclareParents:
     *   value: 指定哪种类型 bean 需要引入改接口
     *   defaultImpl: 指定为引入功能提供实现的类
     *   该注解标注的静态属性指明要引入的接口
     */
    @DeclareParents(value = "com.warm.spring.bean.equip.Equip+", defaultImpl = DefaultUpgrade.class)
    public static Upgrade upgrade;
}
